package br.com.bomsabor.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

import br.com.bomsabor.model.ItemPedido;
import br.com.bomsabor.model.Pedido;
import br.com.bomsabor.model.Produto;

public class ImplItemPedidoDAO implements ItemPedidoDAO {

	public ItemPedido inserir(ItemPedido ip) {
		String sql = "INSERT INTO ItemPedido (codPedido, codProd, quantidade) " +
		"VALUES (?, ?, ?)";
		Connection con = GenericDAO.getConnection();
		
		try {
			PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.setLong(1, ip.getPedido().getCodPedido());
			ps.setLong(2, ip.getProduto().getCodProduto());
			ps.setLong(3, ip.getQuantidadeProduto());
			ps.executeUpdate();
									
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return ip;
	}

	public void alterar(ItemPedido ip) {
		String sql = "UPDATE ItemPedido SET quantidade = ? " +
		"WHERE codPedido = ? AND codProd = ? ";
		Connection con = GenericDAO.getConnection();
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
		
			ps.setLong(1, ip.getQuantidadeProduto());
			ps.setLong(2, ip.getPedido().getCodPedido());
			ps.setLong(3, ip.getProduto().getCodProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void excluir(ItemPedido ip) {
		String sql = "DELETE ItemPedido WHERE codPedido = ? AND codProd = ?";
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, ip.getPedido().getCodPedido());
			ps.setLong(2, ip.getProduto().getCodProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public Set<ItemPedido> pesquisar(Pedido p) {
		String sql = "SELECT * FROM ItemPedido WHERE codPedido = ? ";
		Set<ItemPedido> lista = new HashSet<ItemPedido>();
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, p.getCodPedido());
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				ItemPedido c = new ItemPedido();
				c.setPedido(p);

				ImplProdutoDAO prodDAO = new ImplProdutoDAO();
				long codProduto = rs.getLong("codProd");
				Produto prod = prodDAO.pesquisar(codProduto);
				c.setProduto(prod);
				
				c.setQuantidadeProduto(rs.getInt("quantidade"));
				lista.add(c);		
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}
	
}
